<?php

include('includes/session.inc');
$Title = _('Clone Item');
/* KwaMoja manual links before header.inc */
$ViewTopic = 'Inventory';
$BookMark = 'CloneItem';
include('includes/header.inc');
include('includes/SQL_CommonFunctions.inc');

if (isset($_GET['OldStockID']) or isset($_POST['OldStockID'])) { //we are cloning
	$_POST['OldStockID'] = (isset($_GET['OldStockID']) and !empty($_GET['OldStockID'])) ? $_GET['OldStockID'] : $_POST['OldStockID'];
	$_POST['OldStockID'] = trim(mb_strtoupper($_POST['OldStockID']));
	$_POST['New'] = 1;
	if (isset($_POST['StockID'])) {
		$_POST['StockID'] = trim(mb_strtoupper($_POST['StockID']));
	} else {
		$_POST['StockID'] = '';
	}
} else {
	$_POST['New'] = 0;
	$_POST['OldStockID'] = '';
	$_POST['StockID'] = '';
	$InputError = 1;
	$Errors[0] = 'OldStockID';
	prnMsg(_('To use this script it must be called with the Stock ID of the item to be cloned passed in as $OldStockID. Please use the Clone This Item option in the Items Menu.'), 'error');
}

$ItemDescriptionLanguages = explode(',', $_SESSION['ItemDescriptionLanguages']);

if (isset($_POST['StockID']) and !empty($_POST['StockID']) and !isset($_POST['UpdateCategories'])) {
	$sql = "SELECT COUNT(stockid)
			FROM stockmaster
			WHERE stockid='" . $_POST['StockID'] . "'
			GROUP BY stockid";

	$result = DB_query($sql, $db);
	$myrow = DB_fetch_row($result);
	if (($myrow[0] == 0) and ($_POST['OldStockID'] != '')) {
		$_POST['New'] = 1;
	} else {
		prnMsg(_('The stock code entered is already in the database - duplicate stock codes are prohibited by the system. Try choosing an alternative stock code'), 'error');
		$Errors[1] = 'DuplicateStockID';
		$_POST['New'] = 0;
		$_POST['StockID'] = $_POST['OldStockID'];
	}
}

echo '<div class="toplink"><a href="' . $RootPath . '/SelectProduct.php">' . _('Back to Items') . '</a></div>
	<p class="page_title_text">
		<img src="' . $RootPath . '/css/' . $Theme . '/images/inventory.png" title="' . _('Stock') . '" alt="" />' . ' ' . $Title . '
	</p>';
echo '<div class="page_help_text">' . _('Cloning will create a new item with the same properties, image, cost, purchasing and pricing data as the selected item. Item image and general item details can be changed below prior to cloning.') . '</div>';
if (!empty($_POST['OldStockID'])) { //only show this if there is a valid call to this script
	if (isset($_FILES['ItemPicture']) and $_FILES['ItemPicture']['name'] != '') { //we are uploading a new file
		$newfilename = ($_POST['OldStockID'] == $_POST['StockID']) or $_POST['StockID'] == '' ? $_POST['OldStockID'] . '-TEMP' : $_POST['StockID']; //so we can add a new file but not remove an existing item file
		$result = $_FILES['ItemPicture']['error'];
		$UploadTheFile = 'Yes'; //Assume all is well to start off with
		$filename = $_SESSION['part_pics_dir'] . '/' . $newfilename . '.jpg';

		//But check for the worst
		if (mb_strtoupper(mb_substr(trim($_FILES['ItemPicture']['name']), mb_strlen($_FILES['ItemPicture']['name']) - 3)) != 'JPG') {
			prnMsg(_('Only jpg files are supported - a file extension of .jpg is expected'), 'warn');
			$UploadTheFile = 'No';
		} elseif ($_FILES['ItemPicture']['size'] > ($_SESSION['MaxImageSize'] * 1024)) { //File Size Check
			prnMsg(_('The image file size is over the maximum allowed. The maximum size allowed in KB is') . ' ' . $_SESSION['MaxImageSize'], 'warn');
			$UploadTheFile = 'No';
		} elseif ($_FILES['ItemPicture']['type'] == 'text/plain') { //File Type Check
			prnMsg(_('Only graphics files can be uploaded'), 'warn');
			$UploadTheFile = 'No';
		} elseif ($_FILES['ItemPicture']['error'] == 6) { //upload temp directory check
			prnMsg(_('No tmp directory set. You must have a tmp directory set in your PHP for upload of files. '), 'warn');
			$UploadTheFile = 'No';
		} elseif (file_exists($filename)) {
			prnMsg(_('Attempting to overwrite an existing item image'), 'warn');
			$result = unlink($filename);
			if (!$result) {
				prnMsg(_('The existing image could not be removed'), 'error');
				$UploadTheFile = 'No';
			}
		}
		//first remove any temp file that ight be there
		@unlink($filename);
		if ($UploadTheFile == 'Yes') {
			$result = move_uploaded_file($_FILES['ItemPicture']['tmp_name'], $filename);
			$message = ($result) ? _('File url') . '<a href="' . $filename . '">' . $filename . '</a>' : _('Something is wrong with uploading a file');
		}
	} elseif (!empty($_POST['StockID']) and ($_POST['StockID'] != $_POST['OldStockID']) and file_exists($_SESSION['part_pics_dir'] . '/' . $_POST['OldStockID'] . '-TEMP' . '.jpg')) {
		//rename the temp one to the new name
		$oldfile = $_SESSION['part_pics_dir'] . '/' . $_POST['OldStockID'] . '-TEMP' . '.jpg';
		if (!copy($oldfile, $_SESSION['part_pics_dir'] . '/' . $_POST['StockID'] . '.jpg')) {
			prnMsg(_('There was an image file to clone but there was an error copying. Please upload a new image if required.'), 'warn');
		}
		@unlink($_SESSION['part_pics_dir'] . '/' . $_POST['OldStockID'] . '-TEMP' . '.jpg');
		if (is_file($_SESSION['part_pics_dir'] . '/' . $_POST['OldStockID'] . '-TEMP' . '.jpg')) {
			prnMsg(_('Unable to delete the temporary image file for cloned item.'), 'error');
		} else {
			$StockImgLink = _('No Image');
		}
	} elseif (isset($_POST['OldStockID']) and file_exists($_SESSION['part_pics_dir'] . '/' . $_POST['OldStockID'] . '.jpg') and !file_exists($_SESSION['part_pics_dir'] . '/' . $_POST['OldStockID'] . '-TEMP' . '.jpg')) {
		//we should copy
		if (!copy($_SESSION['part_pics_dir'] . '/' . $_POST['OldStockID'] . '.jpg', $_SESSION['part_pics_dir'] . '/' . $_POST['StockID'] . '.jpg')) {
			prnMsg(_('There was an image file to clone but there was an error copying. Please upload a new image if required.'), 'warn');
		}
	}
}
if (isset($Errors)) {
	unset($Errors);
}
$Errors = array();
$InputError = 0;
if (isset($_POST['submit'])) {
	//initialise no input errors assumed initially before we test
	/* actions to take once the user has clicked the submit button
	ie the page has called itself with some user input */

	//first off validate inputs sensible
	$i = 1;

	if (!isset($_POST['Description']) or mb_strlen($_POST['Description']) > 50 or mb_strlen($_POST['Description']) == 0) {
		$InputError = 1;
		prnMsg(_('The stock item description must be entered and be fifty characters or less long') . '. ' . _('It cannot be a zero length string either') . ' - ' . _('a description is required'), 'error');
		$Errors[$i] = 'Description';
		$i++;
	}
	if (mb_strlen($_POST['LongDescription']) == 0) {
		$InputError = 1;
		prnMsg(_('The stock item description cannot be a zero length string') . ' - ' . _('a long description is required'), 'error');
		$Errors[$i] = 'LongDescription';
		$i++;
	}
	if ($_POST['StockID'] == $_POST['OldStockID']) {
		$InputError = 1;
		prnMsg(_('The Stock Item code must be unique. Please re-enter a unique Stock Item code.'), 'error');
		$Errors[$i] = 'StockID';
		$i++;
	}
	if (mb_strlen($_POST['StockID']) == 0) {
		$InputError = 1;
		prnMsg(_('The Stock Item code cannot be empty. Please enter a unique Stock Item code.'), 'error');
		$Errors[$i] = 'StockID';
		$i++;
	}
	if (ContainsIllegalCharacters($_POST['StockID']) or mb_strpos($_POST['StockID'], ' ')) {
		$InputError = 1;
		prnMsg(_('The stock item code cannot contain any of the following characters') . " - ' &amp; + \" \\ ." . _('or a space'), 'error');
		$Errors[$i] = 'StockID';
		$i++;
		$_POST['StockID'] = '';
	}
	if (mb_strlen($_POST['Units']) > 20) {
		$InputError = 1;
		prnMsg(_('The unit of measure must be 20 characters or less long'), 'error');
		$Errors[$i] = 'Units';
		$i++;
	}
	if (mb_strlen($_POST['BarCode']) > 20) {
		$InputError = 1;
		prnMsg(_('The barcode must be 20 characters or less long'), 'error');
		$Errors[$i] = 'BarCode';
		$i++;
	}
	if (!is_numeric(filter_number_format($_POST['Volume']))) {
		$InputError = 1;
		prnMsg(_('The volume of the packaged item in cubic metres must be numeric'), 'error');
		$Errors[$i] = 'Volume';
		$i++;
	}
	if (filter_number_format($_POST['Volume']) < 0) {
		$InputError = 1;
		prnMsg(_('The volume of the packaged item must be a positive number'), 'error');
		$Errors[$i] = 'Volume';
		$i++;
	}
	if (!is_numeric(filter_number_format($_POST['GrossWeight']))) {
		$InputError = 1;
		prnMsg(_('The weight of the packaged item in Gross Weight must be numeric'), 'error');
		$Errors[$i] = 'GrossWeight';
		$i++;
	}
	if (filter_number_format($_POST['GrossWeight']) < 0) {
		$InputError = 1;
		prnMsg(_('The weight of the packaged item must be a positive number'), 'error');
		$Errors[$i] = 'GrossWeight';
		$i++;
	}
	if (!is_numeric(filter_number_format($_POST['NetWeight']))) {
		$InputError = 1;
		prnMsg(_('The net weight of the item in Net Weight must be numeric'), 'error');
		$Errors[$i] = 'NetWeight';
		$i++;
	}
	if (filter_number_format($_POST['NetWeight']) < 0) {
		$InputError = 1;
		prnMsg(_('The net weight of the item must be a positive number'), 'error');
		$Errors[$i] = 'NetWeight';
		$i++;
	}
	if (!is_numeric(filter_number_format($_POST['EOQ']))) {
		$InputError = 1;
		prnMsg(_('The economic order quantity must be numeric'), 'error');
		$Errors[$i] = 'EOQ';
		$i++;
	}
	if (filter_number_format($_POST['EOQ']) < 0) {
		$InputError = 1;
		prnMsg(_('The economic order quantity must be a positive number'), 'error');
		$Errors[$i] = 'EOQ';
		$i++;
	}
	if ($_POST['Controlled'] == 0 and $_POST['Serialised'] == 1) {
		$InputError = 1;
		prnMsg(_('The item can only be serialised if there is lot control enabled already') . '. ' . _('Batch control') . ' - ' . _('with any number of items in a lot/bundle/roll is enabled when controlled is enabled') . '. ' . _('Serialised control requires that only one item is in the batch') . '. ' . _('For serialised control') . ', ' . _('both controlled and serialised must be enabled'), 'error');
		$Errors[$i] = 'Serialised';
		$i++;
	}
	if ($_POST['NextSerialNo'] != 0 and $_POST['Serialised'] == 0) {
		$InputError = 1;
		prnMsg(_('The item can only have automatically generated serial numbers if it is a serialised item'), 'error');
		$Errors[$i] = 'NextSerialNo';
		$i++;
	}
	if ($_POST['NextSerialNo'] != 0 and $_POST['MBFlag'] != 'M') {
		$InputError = 1;
		prnMsg(_('The item can only have automatically generated serial numbers if it is a manufactured item'), 'error');
		$Errors[$i] = 'NextSerialNo';
		$i++;
	}
	if (($_POST['MBFlag'] == 'A' or $_POST['MBFlag'] == 'K' or $_POST['MBFlag'] == 'D' or $_POST['MBFlag'] == 'G') and $_POST['Controlled'] == 1) {

		$InputError = 1;
		prnMsg(_('Assembly/Kitset/Phantom/Service/Labour items cannot also be controlled items') . '. ' . _('Assemblies/Dummies/Phantom and Kitsets are not physical items and batch/serial control is therefore not appropriate'), 'error');
		$Errors[$i] = 'Controlled';
		$i++;
	}
	if (trim($_POST['CategoryID']) == '') {
		$InputError = 1;
		prnMsg(_('There are no inventory categories defined. All inventory items must belong to a valid inventory category,'), 'error');
		$Errors[$i] = 'CategoryID';
		$i++;
	}
	if (!is_numeric(filter_number_format($_POST['Pansize']))) {
		$InputError = 1;
		prnMsg(_('Pansize quantity must be numeric'), 'error');
		$Errors[$i] = 'Pansize';
		$i++;
	}
	if (!is_numeric(filter_number_format($_POST['ShrinkFactor']))) {
		$InputError = 1;
		prnMsg(_('Shrinkage factor quantity must be numeric'), 'error');
		$Errors[$i] = 'ShrinkFactor';
		$i++;
	}

	if ($InputError != 1) {
		if ($_POST['Serialised'] == 1) {
			/*Not appropriate to have several dp on serial items */
			$_POST['DecimalPlaces'] = 0;
		}
		if ($_POST['New'] != 0) { //it is a NEW CLONED part
			//but lets be really sure here
			$result = DB_query("SELECT stockid
								FROM stockmaster
								WHERE stockid='" . $_POST['StockID'] . "'", $db);
			if (DB_num_rows($result) == 1) {
				prnMsg(_('The stock code entered is already in the database - duplicate stock codes are prohibited by the system. Try choosing an alternative stock code'), 'error');
				$Errors[$i] = 'DuplicateStockID';
			} else {
				DB_Txn_Begin($db);
				$sql = "INSERT INTO stockmaster (stockid,
												description,
												longdescription,
												categoryid,
												units,
												mbflag,
												eoq,
												discontinued,
												controlled,
												serialised,
												perishable,
												volume,
												grossweight,
												netweight,
												barcode,
												discountcategory,
												taxcatid,
												decimalplaces,
												shrinkfactor,
												pansize)
							VALUES ('" . $_POST['StockID'] . "',
								'" . $_POST['Description'] . "',
								'" . $_POST['LongDescription'] . "',
								'" . $_POST['CategoryID'] . "',
								'" . $_POST['Units'] . "',
								'" . $_POST['MBFlag'] . "',
								'" . filter_number_format($_POST['EOQ']) . "',
								'" . $_POST['Discontinued'] . "',
								'" . $_POST['Controlled'] . "',
								'" . $_POST['Serialised'] . "',
								'" . $_POST['Perishable'] . "',
								'" . filter_number_format($_POST['Volume']) . "',
								'" . filter_number_format($_POST['GrossWeight']) . "',
								'" . filter_number_format($_POST['NetWeight']) . "',
								'" . $_POST['BarCode'] . "',
								'" . $_POST['DiscountCategory'] . "',
								'" . $_POST['TaxCat'] . "',
								'" . $_POST['DecimalPlaces'] . "',
								'" . filter_number_format($_POST['ShrinkFactor']) . "',
								'" . filter_number_format($_POST['Pansize']) . "')";

				$ErrMsg = _('The item could not be added because');
				$DbgMsg = _('The SQL that was used to add the item failed was');
				$result = DB_query($sql,$db, $ErrMsg, $DbgMsg,'',true);
				if (DB_error_no($db) == 0) {
					//now insert the language descriptions
					$ErrMsg = _('Could not update the language description because');
					$DbgMsg = _('The SQL that was used to update the language description and failed was');
					if (count($ItemDescriptionLanguages) > 0) {
						foreach ($ItemDescriptionLanguages as $DescriptionLanguage) {
							if ($DescriptionLanguage != '') {
								$result = DB_query("INSERT INTO stockdescriptiontranslations VALUES('" . $_POST['StockID'] . "','" . $DescriptionLanguage . "', '" . $_POST['Description_' . str_replace('.', '_', $DescriptionLanguage)] . "')", $db, $ErrMsg, $DbgMsg, true);
							}
						}
					}
					//now insert any item properties
					for ($i = 0; $i < $_POST['PropertyCounter']; $i++) {

						if ($_POST['PropType' . $i] == 2) {
							if ($_POST['PropValue' . $i] == 'on') {
								$_POST['PropValue' . $i] = 1;
							} else {
								$_POST['PropValue' . $i] = 0;
							}
						}

						if ($_POST['PropNumeric' . $i] == 1) {
							$_POST['PropValue' . $i] = filter_number_format($_POST['PropValue' . $i]);
						} else {
							$_POST['PropValue' . $i] = $_POST['PropValue' . $i];
						}

						$result = DB_query("INSERT INTO stockitemproperties (stockid,
													stkcatpropid,
													value)
													VALUES ('" . $_POST['StockID'] . "',
														'" . $_POST['PropID' . $i] . "',
														'" . $_POST['PropValue' . $i] . "')", $db, $ErrMsg, $DbgMsg, true);
					} //end of loop around properties defined for the category

					//Add data to locstock

					$sql = "INSERT INTO locstock (loccode,
													stockid)
										SELECT locations.loccode,
										'" . $_POST['StockID'] . "'
										FROM locations";

					$ErrMsg = _('The locations for the item') . ' ' . $_POST['StockID'] . ' ' . _('could not be added because');
					$DbgMsg = _('NB Locations records can be added by opening the utility page') . ' <i>Z_MakeStockLocns.php</i> ' . _('The SQL that was used to add the location records that failed was');
					$InsResult = DB_query($sql, $db, $ErrMsg, $DbgMsg, true);

					//check for any purchase data
					$sql = "SELECT purchdata.supplierno,
								suppliers.suppname,
								purchdata.price,
								suppliers.currcode,
								purchdata.effectivefrom,
								purchdata.suppliersuom,
								purchdata.supplierdescription,
								purchdata.leadtime,
								purchdata.suppliers_partno,
								purchdata.minorderqty,
								purchdata.preferred,
								purchdata.conversionfactor,
								currencies.decimalplaces AS currdecimalplaces
							FROM purchdata INNER JOIN suppliers
								ON purchdata.supplierno=suppliers.supplierid
							INNER JOIN currencies
								ON suppliers.currcode=currencies.currabrev
							WHERE purchdata.stockid = '" . $_POST['OldStockID'] . "'
							ORDER BY purchdata.effectivefrom DESC";
					$ErrMsg = _('The supplier purchasing details for the selected part could not be retrieved because');
					$PurchDataResult = DB_query($sql, $db, $ErrMsg);
					if (DB_num_rows($PurchDataResult) == 0 and $_POST['OldStockID'] != '') {
						//prnMsg(_('There is no purchasing data set up for the part selected'), 'info');
						$NoPurchasingData = 1;
					} else {
						while ($myrow = DB_fetch_array($PurchDataResult)) { //clone the purchase data

							$sql = "INSERT INTO purchdata (supplierno,
										stockid,
										price,
										effectivefrom,
										suppliersuom,
										conversionfactor,
										supplierdescription,
										suppliers_partno,
										leadtime,
										minorderqty,
										preferred)
								VALUES ('" . $myrow['supplierno'] . "',
									'" . $_POST['StockID'] . "',
									'" . $myrow['price'] . "',
									'" . $myrow['effectivefrom'] . "',
									'" . $myrow['suppliersuom'] . "',
									'" . $myrow['conversionfactor'] . "',
									'" . DB_escape_string($myrow['supplierdescription']) . "',
									'" . $myrow['suppliers_partno'] . "',
									'" . $myrow['leadtime'] . "',
									'" . $myrow['minorderqty'] . "',
									'" . $myrow['preferred'] . "')";
							$ErrMsg = _('The cloned supplier purchasing details could not be added to the database because');
							$DbgMsg = _('The SQL that failed was');
							$AddResult = DB_query($sql, $db, $ErrMsg, $DbgMsg, true);
						}
					}

					//For both the following - assume the data taken from the tables has already been validated.
					//check for price data
					$sql = "SELECT currencies.currency,
								salestypes.sales_type,
							prices.price,
							prices.stockid,
							prices.typeabbrev,
							prices.currabrev,
							prices.startdate,
							prices.enddate,
							prices.debtorno,
							currencies.decimalplaces AS currdecimalplaces
						FROM prices
						INNER JOIN salestypes
							ON prices.typeabbrev = salestypes.typeabbrev
						INNER JOIN currencies
							ON prices.currabrev=currencies.currabrev
						WHERE prices.stockid='" . $_POST['OldStockID'] . "'

						ORDER BY prices.currabrev,
							prices.typeabbrev,
							prices.startdate";

					$PricingDataResult = DB_query($sql, $db);
					//AND prices.debtorno=''
					if (DB_num_rows($PricingDataResult) == 0 and $_POST['OldStockID'] != '') {
						prnMsg(_('There is no purchasing data set up for the part selected'), 'info');
						$NoPricingData = 1;
					} else {
						while ($myrow = DB_fetch_array($PricingDataResult)) { //clone the purchase data
							$sql = "INSERT INTO prices (stockid,
										typeabbrev,
										currabrev,
										debtorno,
										startdate,
										enddate,
										price)
								VALUES ('" . $_POST['StockID'] . "',
									'" . $myrow['typeabbrev'] . "',
									'" . $myrow['currabrev'] . "',
									'" . $myrow['debtorno'] . "',
									'" . $myrow['startdate'] . "',
									'" . $myrow['enddate'] . "',
									'" . $myrow['price'] . "')";
							$ErrMsg = _('The cloned pricing could not be added');
							$DbgMsg = _('The sql that failed to add the cloned pricing');
							$result = DB_query($sql, $db, $ErrMsg, $DbgMsg, true);
						}
					}
					//What about cost data?
					//get any existing cost data
					$sql = "SELECT materialcost,
										labourcost,
										overheadcost,
										mbflag,
										sum(quantity) as totalqoh
								FROM stockmaster INNER JOIN locstock
								ON stockmaster.stockid=locstock.stockid
								WHERE stockmaster.stockid='" . $_POST['OldStockID'] . "'
								GROUP BY description,
										units,
										lastcost,
										actualcost,
										materialcost,
										labourcost,
										overheadcost,
										mbflag";
					$ErrMsg = _('The entered item code does not exist');
					$OldResult = DB_query($sql, $db, $ErrMsg);
					$OldRow = DB_fetch_array($OldResult);

					//now update cloned item costs
					$Result = DB_Txn_Begin($db);
					$SQL = "UPDATE stockmaster SET	materialcost='" . $OldRow['materialcost'] . "',
										labourcost     ='" . $OldRow['labourcost'] . "',
										overheadcost   ='" . $OldRow['overheadcost'] . "',
										lastcost       ='" . $OldRow['lastcost'] . "',
										lastcostupdate ='" . Date('Y-m-d') . "'
								WHERE stockid='" . $_POST['StockID'] . "'";
					$ErrMsg = _('The cost details for the cloned stock item could not be updated because');
					$DbgMsg = _('The SQL that failed was');
					$Result = DB_query($SQL, $db, $ErrMsg, $DbgMsg, true);
					$Result = DB_Txn_Commit($db);

					//finish up
					if (DB_error_no($db) == 0) {
						prnMsg(_('New Cloned Item') . ' ' . '<a href="SelectProduct.php?StockID=' . $_POST['StockID'] . '">' . $_POST['StockID'] . '</a> ' . _('has been added to the database') . '<br />' . _('We also attempted to setup item purchase data and pricing.'));

						if ($NoPricingData == 1) {
							prnMsg(_('There is no pricing data to clone. Use the following link to add pricing.'));
						}

						prnMsg('<br />' . '<a target="_blank" href="Prices.php?Item=' . $_POST['StockID'] . '">' . _('Review Item Prices') . '</a> ', 'success');

						if ($NoPurchasingData == 1) {
							prnMsg(_('There is no purchasing data to clone .Use the following link to add purchasing data.'));
						}
						prnMsg('<br />' . '<a target="_blank" href="PurchData.php?StockID=' . $_POST['StockID'] . '">' . _('Review Item Purchase Data.') . '</a> ', 'success') . prnMsg(_('Costing was updated for this cloned item.') . '<br />' . '<a target="_blank" href="StockCostUpdate.php?StockID=' . $_POST['StockID'] . '">' . _('Review Item Cost') . '</a>', 'success');

						echo '<br />';
						unset($_POST['Description']);
						unset($_POST['LongDescription']);
						unset($_POST['EOQ']);
						// Leave Category ID set for ease of batch entry
						//unset($_POST['CategoryID']);
						unset($_POST['Units']);
						unset($_POST['MBFlag']);
						unset($_POST['Discontinued']);
						unset($_POST['Controlled']);
						unset($_POST['Serialised']);
						unset($_POST['Perishable']);
						unset($_POST['Volume']);
						unset($_POST['GrossWeight']);
						unset($_POST['NetWeight']);
						unset($_POST['BarCode']);
						unset($_POST['ReorderLevel']);
						unset($_POST['DiscountCategory']);
						unset($_POST['DecimalPlaces']);
						unset($_POST['ShrinkFactor']);
						unset($_POST['Pansize']);
						unset($_POST['StockID']);
						foreach ($ItemDescriptionLanguages as $DescriptionLanguage) {
							unset($_POST['Description_' . str_replace('.', '_', $DescriptionLanguage)]);
							$_POST['New'] = 1; //do not show input form again
						}
					} //Reset the form variables
				} //Stock records finished
				DB_Txn_Commit($db);
			} //End of check for existing item
		} //END Cloned item
	} else {
		$_POST['New'] = 1;
		echo '<br />' . "\n";
		prnMsg(_('Validation failed, no updates or deletes took place'), 'error');
	}

}


echo '<form name="ItemForm" enctype="multipart/form-data" method="post" action="' . htmlspecialchars($_SERVER['PHP_SELF'], ENT_QUOTES, 'UTF-8') . '">';
echo '<input type="hidden" name="FormID" value="' . $_SESSION['FormID'] . '" />
	<input type="hidden" name="New" value="' . $_POST['New'] . '" />
	<table class="selection">';

if ($_POST['StockID'] == '' or ($_POST['StockID'] == $_POST['OldStockID']) or isset($_POST['UpdateCategories'])) {

	/*If the page was called without $StockID or empty $StockID  then a new cloned stock item is to be entered. Show a form with a part Code field,
	otherwise show form for editing with only a hidden OldStockID field. */

	$StockIDStyle = (!empty($_POST['StockID']) and ($_POST['StockID'] != $_POST['OldStockID'])) ? '' : ' style="color:red;border: 2px solid red;background-color:#fddbdb;" ';
	$StockID = !empty($_POST['StockID']) ? $_POST['StockID'] : $_POST['OldStockID'];
	echo '<tr>
			<td>' . _('Cloned Item Code') . ':</td>
			<td><input type="text" ' . $StockIDStyle . '" data-type="no-illegal-chars" autofocus="autofocus" required="required" value="' . $StockID . '" name="StockID" size="21" maxlength="20" />
				<input type="hidden" name="OldStockID" value="' . $_POST['OldStockID'] . '" />  ' . _('Enter a unique item code for the new item.') . '
			</td>
		</tr>';

}
if ((!isset($_POST['UpdateCategories']) and ($InputError != 1)) or $_POST['New'] == 1) { // Must be modifying an existing item and no changes made yet

	$selectedStockID = $_POST['OldStockID'];
	$sql = "SELECT stockid,
					description,
					longdescription,
					categoryid,
					units,
					mbflag,
					discontinued,
					controlled,
					serialised,
					perishable,
					eoq,
					volume,
					grossweight,
					netweight,
					barcode,
					discountcategory,
					taxcatid,
					decimalplaces,
					nextserialno,
					pansize,
					shrinkfactor
			FROM stockmaster
			WHERE stockid = '" . $selectedStockID . "'";

	$result = DB_query($sql, $db);
	$myrow = DB_fetch_array($result);

	$_POST['LongDescription'] = $myrow['longdescription'];
	$_POST['Description'] = $myrow['description'];
	$_POST['EOQ'] = $myrow['eoq'];
	$_POST['CategoryID'] = $myrow['categoryid'];
	$_POST['Units'] = $myrow['units'];
	$_POST['MBFlag'] = $myrow['mbflag'];
	$_POST['Discontinued'] = $myrow['discontinued'];
	$_POST['Controlled'] = $myrow['controlled'];
	$_POST['Serialised'] = $myrow['serialised'];
	$_POST['Perishable'] = $myrow['perishable'];
	$_POST['Volume'] = $myrow['volume'];
	$_POST['GrossWeight'] = $myrow['grossweight'];
	$_POST['NetWeight'] = $myrow['netweight'];
	$_POST['BarCode'] = $myrow['barcode'];
	$_POST['DiscountCategory'] = $myrow['discountcategory'];
	$_POST['TaxCat'] = $myrow['taxcatid'];
	$_POST['DecimalPlaces'] = $myrow['decimalplaces'];
	$_POST['NextSerialNo'] = $myrow['nextserialno'];
	$_POST['Pansize'] = $myrow['pansize'];
	$_POST['ShrinkFactor'] = $myrow['shrinkfactor'];

	$sql = "SELECT descriptiontranslation, language_id FROM stockdescriptiontranslations WHERE stockid='" . $selectedStockID . "' AND (";
	foreach ($ItemDescriptionLanguages as $DescriptionLanguage) {
		$sql .= "language_id='" . $DescriptionLanguage . "' OR ";
	}
	$sql = mb_substr($sql, 0, mb_strlen($sql) - 3) . ')';
	$result = DB_query($sql, $db);
	while ($myrow = DB_fetch_array($result)) {
		$_POST['Description_' . str_replace('.', '_', $myrow['language_id'])] = $myrow['descriptiontranslation'];
	}

}

if (isset($_POST['Description'])) {
	$Description = $_POST['Description'];
} else {
	$Description = '';
}
echo '<tr>
			<td>' . _('Part Description') . ' (' . _('short') . '):</td>
			<td><input ' . (in_array('Description', $Errors) ? 'class="inputerror"' : '') . ' type="text" name="Description" size="52" maxlength="50" value="' . $Description . '" /></td>
		</tr>';

foreach ($ItemDescriptionLanguages as $DescriptionLanguage) {
	if ($DescriptionLanguage != '') {
		//unfortunately cannot have points in POST variables so have to mess with the language id
		$PostVariableName = 'Description_' . str_replace('.', '_', $DescriptionLanguage);
		if (!isset($_POST[$PostVariableName])) {
			$_POST[$PostVariableName] = '';
		}
		echo '<tr>
				<td>' . $LanguagesArray[$DescriptionLanguage]['LanguageName'] . ' ' . _('Description') . ':</td>
				<td><input type="text" name="' . $PostVariableName . '" size="52" maxlength="50" value="' . $_POST[$PostVariableName] . '" /></td>
			</tr>';
	}
}

if (isset($_POST['LongDescription'])) {
	$LongDescription = AddCarriageReturns($_POST['LongDescription']);
} else {
	$LongDescription = '';
}
echo '<tr>
			<td>' . _('Part Description') . ' (' . _('long') . '):</td>
			<td><textarea ' . (in_array('LongDescription', $Errors) ? 'class="texterror"' : '') . '  name="LongDescription" cols="40" rows="3">' . stripslashes($LongDescription) . '</textarea></td>
		</tr>
		<tr>
			<td>' . _('Image File (.jpg)') . ':</td>
			<td><input type="file" id="ItemPicture" name="ItemPicture" />
			<br />
			<input type="checkbox" name="ClearImage" id="ClearImage" value="1" /> ' . _('Clear Image') . '
			</td>';

// if this is the first time displaying the form, there will only be a picture with the OldStockID name, if any, else there can be a $_POST['OldStockID'].'-TEMP'. '.jpg' file if one was uploaded
if (empty($_POST['StockID']) or ($_POST['StockID'] == $_POST['OldStockID'])) {
	$tempid = $_POST['OldStockID'] . '-TEMP';
} else {
	$tempid = $_POST['StockID'];
}

if (function_exists('imagecreatefromjpg') and isset($tempfile)) {
	$StockImgLink = '<img src="GetStockImage.php?automake=1&amp;textcolor=FFFFFF&amp;bgcolor=CCCCCC' . '&amp;StockID=' . urlencode($tempid) . '&amp;text=' . '&amp;width=100' . '&amp;height=100' . '" alt="" />';
} else {
	if (!empty($tempid) and file_exists($_SESSION['part_pics_dir'] . '/' . $tempid . '.jpg')) {
		$StockImgLink = '<img src="' . $_SESSION['part_pics_dir'] . '/' . $tempid . '.jpg" height="100" width="100" />';
		if (isset($_POST['ClearImage'])) {
			//workaround for many variations of permission issues that could cause unlink fail
			@unlink($_SESSION['part_pics_dir'] . '/' . $tempid . '.jpg');
			if (is_file($_SESSION['part_pics_dir'] . '/' . $tempid . '.jpg')) {
				prnMsg(_('You do not have access to delete this item image file.'), 'error');
			} else {
				$StockImgLink = _('No Image');
			}
		}
	} elseif (!empty($tempid) and !file_exists($_SESSION['part_pics_dir'] . '/' . $tempid . '.jpg') and file_exists($_SESSION['part_pics_dir'] . '/' . $_POST['OldStockID'] . '.jpg')) {
		if (!copy($_SESSION['part_pics_dir'] . '/' . $_POST['OldStockID'] . '.jpg', $_SESSION['part_pics_dir'] . '/' . $_POST['OldStockID'] . '-TEMP' . '.jpg')) {
			$StockImgLink = _('No Image');
		} else {
			$StockImgLink = '<img src="' . $_SESSION['part_pics_dir'] . '/' . $_POST['OldStockID'] . '-TEMP' . '.jpg" height="100" width="100" />';
		}
	} else {
		$StockImgLink = _('No Image');
	}
}

if ($StockImgLink != _('No Image')) {
	echo '<td>' . _('Image') . '<br />' . $StockImgLink . '</td>';
}
echo '</tr>';

echo '<tr>
			<td>' . _('Category') . ':</td>
			<td><select name="CategoryID" onchange="ReloadForm(ItemForm.UpdateCategories)">';

$sql = "SELECT categoryid, categorydescription FROM stockcategory";
$ErrMsg = _('The stock categories could not be retrieved because');
$DbgMsg = _('The SQL used to retrieve stock categories and failed was');
$result = DB_query($sql, $db, $ErrMsg, $DbgMsg);

while ($myrow = DB_fetch_array($result)) {
	if (!isset($_POST['CategoryID']) or $myrow['categoryid'] == $_POST['CategoryID']) {
		echo '<option selected="selected" value="' . $myrow['categoryid'] . '">' . $myrow['categorydescription'] . '</option>';
	} else {
		echo '<option value="' . $myrow['categoryid'] . '">' . $myrow['categorydescription'] . '</option>';
	}
	$Category = $myrow['categoryid'];
}

if (!isset($_POST['CategoryID'])) {
	$_POST['CategoryID'] = $Category;
}

echo '</select><a target="_blank" href="' . $RootPath . '/StockCategories.php">' . _('Add or Modify Stock Categories') . '</a></td>
		</tr>';

if (!isset($_POST['EOQ']) or $_POST['EOQ'] == '') {
	$_POST['EOQ'] = 0;
}

if (!isset($_POST['Volume']) or $_POST['Volume'] == '') {
	$_POST['Volume'] = 0;
}
if (!isset($_POST['GrossWeight']) or $_POST['GrossWeight'] == '') {
	$_POST['GrossWeight'] = 0;
}
if (!isset($_POST['NetWeight']) or $_POST['NetWeight'] == '') {
	$_POST['NetWeight'] = 0;
}
if (!isset($_POST['Controlled']) or $_POST['Controlled'] == '') {
	$_POST['Controlled'] = 0;
}
if (!isset($_POST['Serialised']) or $_POST['Serialised'] == '' or $_POST['Controlled'] == 0) {
	$_POST['Serialised'] = 0;
}
if (!isset($_POST['DecimalPlaces']) or $_POST['DecimalPlaces'] == '') {
	$_POST['DecimalPlaces'] = 0;
}
if (!isset($_POST['Discontinued']) or $_POST['Discontinued'] == '') {
	$_POST['Discontinued'] = 0;
}
if (!isset($_POST['Pansize'])) {
	$_POST['Pansize'] = 0;
}
if (!isset($_POST['ShrinkFactor'])) {
	$_POST['ShrinkFactor'] = 0;
}
if (!isset($_POST['NextSerialNo'])) {
	$_POST['NextSerialNo'] = 0;
}


echo '<tr>
			<td>' . _('Economic Order Quantity') . ':</td>
			<td><input ' . (in_array('EOQ', $Errors) ? 'class="inputerror"' : '') . '   type="text" class="number" name="EOQ" size="12" maxlength="10" value="' . locale_number_format($_POST['EOQ'], 'Variable') . '" /></td></tr>';

echo '<tr>
			<td>' . _('Packaged Volume (metres cubed)') . ':</td>
			<td><input ' . (in_array('Volume', $Errors) ? 'class="inputerror"' : '') . '   type="text" class="number" name="Volume" size="12" maxlength="10" value="' . locale_number_format($_POST['Volume'], 'Variable') . '" /></td>
		</tr>';

echo '<tr>
			<td>' . _('Packaged Gross Weight (KGs)') . ':</td><td><input ' . (in_array('GrossWeight', $Errors) ? 'class="inputerror"' : '') . '   type="text" class="number" name="GrossWeight" size="12" maxlength="10" value="' . locale_number_format($_POST['GrossWeight'], 'Variable') . '" /></td>
		</tr>';

echo '<tr>
			<td>' . _('Net Weight (KGs)') . ':</td><td><input ' . (in_array('NetWeight', $Errors) ? 'class="inputerror"' : '') . '   type="text" class="number" name="NetWeight" size="12" maxlength="10" value="' . locale_number_format($_POST['NetWeight'], 'Variable') . '" /></td>
		</tr>';

echo '<tr>
			<td>' . _('Units of Measure') . ':</td>
			<td><select ' . (in_array('Description', $Errors) ? 'class="selecterror"' : '') . '  name="Units">';

$sql = "SELECT unitname FROM unitsofmeasure ORDER by unitname";
$UOMResult = DB_query($sql, $db);

if (!isset($_POST['Units'])) {
	$UOMrow['unitname'] = _('each');
}
while ($UOMrow = DB_fetch_array($UOMResult)) {
	if (isset($_POST['Units']) and $_POST['Units'] == $UOMrow['unitname']) {
		echo '<option selected="selected" value="' . $UOMrow['unitname'] . '">' . $UOMrow['unitname'] . '</option>';
	} else {
		echo '<option value="' . $UOMrow['unitname'] . '">' . $UOMrow['unitname'] . '</option>';
	}
}

echo '</select></td>
		</tr>';

echo '<tr>
			<td>' . _('Assembly, Kit, Manufactured or Service/Labour') . ':</td>
			<td><select name="MBFlag">';
if ($_POST['MBFlag'] == 'A') {
	echo '<option selected="selected" value="A">' . _('Assembly') . '</option>';
} else {
	echo '<option value="A">' . _('Assembly') . '</option>';
}
if (!isset($_POST['MBFlag']) or $_POST['MBFlag'] == 'K') {
	echo '<option selected="selected" value="K">' . _('Kit') . '</option>';
} else {
	echo '<option value="K">' . _('Kit') . '</option>';
}
if (!isset($_POST['MBFlag']) or $_POST['MBFlag'] == 'M') {
	echo '<option selected="selected" value="M">' . _('Manufactured') . '</option>';
} else {
	echo '<option value="M">' . _('Manufactured') . '</option>';
}
if (!isset($_POST['MBFlag']) or $_POST['MBFlag'] == 'G' or !isset($_POST['MBFlag']) or $_POST['MBFlag'] == '') {
	echo '<option selected="selected" value="G">' . _('Phantom') . '</option>';
} else {
	echo '<option value="G">' . _('Phantom') . '</option>';
}
if (!isset($_POST['MBFlag']) or $_POST['MBFlag'] == 'B' or !isset($_POST['MBFlag']) or $_POST['MBFlag'] == '') {
	echo '<option selected="selected" value="B">' . _('Purchased') . '</option>';
} else {
	echo '<option value="B">' . _('Purchased') . '</option>';
}

if (isset($_POST['MBFlag']) and $_POST['MBFlag'] == 'D') {
	echo '<option selected="selected" value="D">' . _('Service/Labour') . '</option>';
} else {
	echo '<option value="D">' . _('Service/Labour') . '</option>';
}

echo '</select></td>
		</tr>';

echo '<tr>
			<td>' . _('Current or Obsolete') . ':</td>
			<td><select name="Discontinued">';

if ($_POST['Discontinued'] == 0) {
	echo '<option selected="selected" value="0">' . _('Current') . '</option>';
} else {
	echo '<option value="0">' . _('Current') . '</option>';
}
if ($_POST['Discontinued'] == 1) {
	echo '<option selected="selected" value="1">' . _('Obsolete') . '</option>';
} else {
	echo '<option value="1">' . _('Obsolete') . '</option>';
}
echo '</select></td>
			</tr>';

echo '<tr>
			<td>' . _('Batch, Serial or Lot Control') . ':</td>
			<td><select name="Controlled">';

if ($_POST['Controlled'] == 0) {
	echo '<option selected="selected" value="0">' . _('No Control') . '</option>';
} else {
	echo '<option value="0">' . _('No Control') . '</option>';
}
if ($_POST['Controlled'] == 1) {
	echo '<option selected="selected" value="1">' . _('Controlled') . '</option>';
} else {
	echo '<option value="1">' . _('Controlled') . '</option>';
}
echo '</select></td></tr>';

echo '<tr><td>' . _('Serialised') . ':</td><td><select ' . (in_array('Serialised', $Errors) ? 'class="selecterror"' : '') . '  name="Serialised">';

if ($_POST['Serialised'] == 0) {
	echo '<option selected="selected" value="0">' . _('No') . '</option>';
} else {
	echo '<option value="0">' . _('No') . '</option>';
}
if ($_POST['Serialised'] == 1) {
	echo '<option selected="selected" value="1">' . _('Yes') . '</option>';
} else {
	echo '<option value="1">' . _('Yes') . '</option>';
}
echo '</select><i>' . _('Note') . ', ' . _('this has no effect if the item is not Controlled') . '</i></td>
		</tr>';

if ($_POST['Serialised'] == 1 and $_POST['MBFlag'] == 'M') {
	echo '<tr>
				<td>' . _('Next Serial No (>0 for auto numbering)') . ':</td>
				<td><input ' . (in_array('NextSerialNo', $Errors) ? 'class="inputerror"' : '') . ' type="text" name="NextSerialNo" size="15" maxlength="15" value="' . $_POST['NextSerialNo'] . '" /></td></tr>';
} else {
	echo '<tr><td><input type="hidden" name="NextSerialNo" value="0" /></td></tr>';
}

echo '<tr>
			<td>' . _('Perishable') . ':</td>
			<td><select name="Perishable">';

if (!isset($_POST['Perishable']) or $_POST['Perishable'] == 0) {
	echo '<option selected="selected" value="0">' . _('No') . '</option>';
} else {
	echo '<option value="0">' . _('No') . '</option>';
}
if (isset($_POST['Perishable']) and $_POST['Perishable'] == 1) {
	echo '<option selected="selected" value="1">' . _('Yes') . '</option>';
} else {
	echo '<option value="1">' . _('Yes') . '</option>';
}
echo '</select></td></tr>';

echo '<tr>
			<td>' . _('Decimal Places for display Quantity') . ':</td>
			<td><input type="text" class="number" name="DecimalPlaces" size="1" maxlength="1" value="' . $_POST['DecimalPlaces'] . '" /></td>
		</tr>';

if (isset($_POST['BarCode'])) {
	$BarCode = $_POST['BarCode'];
} else {
	$BarCode = '';
}
echo '<tr>
			<td>' . _('Bar Code') . ':</td>
			<td><input ' . (in_array('BarCode', $Errors) ? 'class="inputerror"' : '') . '  type="text" name="BarCode" size="22" maxlength="20" value="' . $BarCode . '" /></td>
		</tr>';

if (isset($_POST['DiscountCategory'])) {
	$DiscountCategory = $_POST['DiscountCategory'];
} else {
	$DiscountCategory = '';
}
echo '<tr>
			<td>' . _('Discount Category') . ':</td>
			<td><input type="text" name="DiscountCategory" size="2" maxlength="2" value="' . $DiscountCategory . '" /></td>
		</tr>';

echo '<tr>
			<td>' . _('Tax Category') . ':</td>
			<td><select name="TaxCat">';
$sql = "SELECT taxcatid, taxcatname FROM taxcategories ORDER BY taxcatname";
$result = DB_query($sql, $db);

if (!isset($_POST['TaxCat'])) {
	$_POST['TaxCat'] = $_SESSION['DefaultTaxCategory'];
}

while ($myrow = DB_fetch_array($result)) {
	if ($_POST['TaxCat'] == $myrow['taxcatid']) {
		echo '<option selected="selected" value="' . $myrow['taxcatid'] . '">' . $myrow['taxcatname'] . '</option>';
	} else {
		echo '<option value="' . $myrow['taxcatid'] . '">' . $myrow['taxcatname'] . '</option>';
	}
} //end while loop

echo '</select></td>
		</tr>';

echo '<tr>
			<td>' . _('Pan Size') . ':</td>
			<td><input type="text" class="number" name="Pansize" size="6" maxlength="6" value="' . locale_number_format($_POST['Pansize'], 0) . '" /></td>
		</tr>
		 <tr>
			<td>' . _('Shrinkage Factor') . ':</td>
			<td><input type="text" class="number" name="ShrinkFactor" size="6" maxlength="6" value="' . locale_number_format($_POST['ShrinkFactor'], 0) . '" /></td>
		</tr>';

echo '</table>';

if (!isset($_POST['CategoryID'])) {
	$_POST['CategoryID'] = '';
}

$sql = "SELECT stkcatpropid,
					label,
					controltype,
					defaultvalue,
					numericvalue,
					minimumvalue,
					maximumvalue
			FROM stockcatproperties
			WHERE categoryid ='" . $_POST['CategoryID'] . "'
			AND reqatsalesorder =0
			ORDER BY stkcatpropid";

$PropertiesResult = DB_query($sql, $db);
$PropertyCounter = 0;
$PropertyWidth = array();

if (DB_num_rows($PropertiesResult) > 0) {
	echo '<br />
		<table class="selection">';
	echo '<tr>
				<th colspan="2">' . _('Item Category Properties') . '</th>
			</tr>';

	while ($PropertyRow = DB_fetch_array($PropertiesResult)) {

		if (isset($_POST['StockID']) and !empty($_POST['StockID'])) {
			$PropValResult = DB_query("SELECT value FROM
											stockitemproperties
											WHERE stockid='" . $_POST['StockID'] . "'
											AND stkcatpropid ='" . $PropertyRow['stkcatpropid'] . "'", $db);
			$PropValRow = DB_fetch_row($PropValResult);
			$PropertyValue = $PropValRow[0];
		} else {
			$PropertyValue = '';
		}
		echo '<tr>
					<td>';
		echo '<input type="hidden" name="PropID' . $PropertyCounter . '" value="' . $PropertyRow['stkcatpropid'] . '" />';
		echo '<input type="hidden" name="PropNumeric' . $PropertyCounter . '" value="' . $PropertyRow['numericvalue'] . '" />';
		echo $PropertyRow['label'] . '</td>

					<td>';
		switch ($PropertyRow['controltype']) {
			case 0; //textbox
				if ($PropertyRow['numericvalue'] == 1) {
					echo '<input type="hidden" name="PropMin' . $PropertyCounter . '" value="' . $PropertyRow['minimumvalue'] . '" />';
					echo '<input type="hidden" name="PropMax' . $PropertyCounter . '" value="' . $PropertyRow['maximumvalue'] . '" />';

					echo '<input type="text" class="number" name="PropValue' . $PropertyCounter . '" size="20" maxlength="100" value="' . locale_number_format($PropertyValue, 'Variable') . '" />';
					echo _('A number between') . ' ' . locale_number_format($PropertyRow['minimumvalue'], 'Variable') . ' ' . _('and') . ' ' . locale_number_format($PropertyRow['maximumvalue'], 'Variable') . ' ' . _('is expected');
				} else {
					echo '<input type="text" name="PropValue' . $PropertyCounter . '" size="20" maxlength="100" value="' . $PropertyValue . '" />';
				}
				break;
			case 1; //select box
				$OptionValues = explode(',', $PropertyRow['defaultvalue']);
				echo '<select name="PropValue' . $PropertyCounter . '">';
				foreach ($OptionValues as $PropertyOptionValue) {
					if ($PropertyOptionValue == $PropertyValue) {
						echo '<option selected="selected" value="' . $PropertyOptionValue . '">' . $PropertyOptionValue . '</option>';
					} else {
						echo '<option value="' . $PropertyOptionValue . '">' . $PropertyOptionValue . '</option>';
					}
				}
				echo '</select>';
				break;
			case 2; //checkbox
				echo '<input type="checkbox" name="PropValue' . $PropertyCounter . '"';
				if ($PropertyValue == 1) {
					echo 'checked';
				}
				echo ' />';
				break;
		} //end switch
		echo '<input type="hidden" name="PropType' . $PropertyCounter . '" value="' . $PropertyRow['controltype'] . '" />';
		echo '</td></tr>';
		$PropertyCounter++;

	} //end loop round properties for the item category
	unset($StockID);
	echo '</table>';
}
echo '<input type="hidden" name="PropertyCounter" value="' . $PropertyCounter . '" />';

echo '<div class="centre"><input type="submit" name="submit" value="' . _('Insert New Item') . '" />';
echo '<input type="submit" name="UpdateCategories" style="visibility:hidden;width:1px" value="' . _('Categories') . '" /></div>';

echo '</form>';
include('includes/footer.inc');

?>